common.skill

বাস্তব উদাহরণ এবং ব্যবহারিক ডেমো

Database Tutorials - এইচ২ ডাটাবেস (H2 Database)
215
215

H2 Database হল একটি শক্তিশালী, লাইটওয়েট SQL ডেটাবেজ যা ডেভেলপারদের জন্য বিভিন্ন ধরনের বাস্তব প্রয়োগে ব্যবহৃত হতে পারে। এই টিউটোরিয়ালে, আমরা একটি Spring Boot অ্যাপ্লিকেশন তৈরি করব যা H2 ডেটাবেজ ব্যবহার করবে এবং সেখানে ডেটাবেস অপারেশন যেমন CRUD (Create, Read, Update, Delete) কাজগুলো বাস্তবে দেখানো হবে।

আমরা একটি Employee Management System উদাহরণ ব্যবহার করব, যেখানে Employee তথ্য ডেটাবেজে সংরক্ষণ করা হবে।


ব্যবহারিক ডেমো: Spring Boot এবং H2 Database Integration

এই উদাহরণটি Spring Boot, Spring Data JPA, এবং H2 Database ব্যবহার করে তৈরি করা হবে।

১. Spring Boot প্রোজেক্ট তৈরি করা

আপনি Spring Initializr ব্যবহার করে একটি Spring Boot প্রোজেক্ট তৈরি করতে পারেন। এখানে আমরা কিছু প্রাথমিক সেটআপ দেখাচ্ছি:

  • Dependencies:
    • Spring Web
    • Spring Data JPA
    • H2 Database

এটি টেমপ্লেট হিসাবে Employee Management অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।


২. Dependencies যোগ করা

Spring Boot প্রোজেক্টে H2 এবং Spring Data JPA এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।

pom.xml (Maven):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

build.gradle (Gradle):

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
}

৩. application.properties কনফিগারেশন

application.properties ফাইলের মাধ্যমে H2 ডেটাবেজের কনফিগারেশন করতে হবে।

# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# Enable H2 Console for accessing database through web
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

এখানে:

  • spring.datasource.url: ইন-মেমরি H2 ডেটাবেজ URL।
  • spring.h2.console.enabled: H2 Console সক্রিয় করা হয়েছে, যাতে ডেটাবেজ ওয়েব কনসোলের মাধ্যমে অ্যাক্সেস করা যায়।

৪. Entity তৈরি করা

ডেটাবেজের সাথে কাজ করার জন্য Employee নামক একটি Entity তৈরি করতে হবে।

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;
    private Double salary;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }
}

৫. Repository Interface তৈরি করা

Spring Data JPA ব্যবহার করতে Repository Interface তৈরি করতে হবে।

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

এটি Employee Entity এর জন্য CRUD অপারেশন সরবরাহ করবে।


৬. Service Layer তৈরি করা

Business Logic রাখার জন্য Service লেয়ার তৈরি করা হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Get all employees
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    // Add a new employee
    public Employee addEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    // Update an existing employee
    public Employee updateEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    // Get employee by ID
    public Optional<Employee> getEmployeeById(Long id) {
        return employeeRepository.findById(id);
    }

    // Delete employee
    public void deleteEmployee(Long id) {
        employeeRepository.deleteById(id);
    }
}

৭. Controller Layer তৈরি করা

RESTful API এর মাধ্যমে HTTP রিকোয়েস্ট গ্রহণ এবং রেসপন্স প্রদান করার জন্য Controller তৈরি করা হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    // Get all employees
    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    // Get employee by ID
    @GetMapping("/{id}")
    public Optional<Employee> getEmployeeById(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }

    // Add new employee
    @PostMapping
    public Employee addEmployee(@RequestBody Employee employee) {
        return employeeService.addEmployee(employee);
    }

    // Update employee
    @PutMapping("/{id}")
    public Employee updateEmployee(@PathVariable Long id, @RequestBody Employee employee) {
        employee.setId(id);
        return employeeService.updateEmployee(employee);
    }

    // Delete employee
    @DeleteMapping("/{id}")
    public void deleteEmployee(@PathVariable Long id) {
        employeeService.deleteEmployee(id);
    }
}

৮. H2 Web Console Access

Spring Boot অ্যাপ্লিকেশন চালানোর পর, আপনি H2 Web Console-এ http://localhost:8080/h2-console গিয়ে আপনার ডেটাবেজ অ্যাক্সেস করতে পারবেন।

  • JDBC URL: jdbc:h2:mem:testdb
  • Username: sa
  • Password: password

৯. Spring Boot অ্যাপ্লিকেশন রান করা

Spring Boot অ্যাপ্লিকেশন চালাতে আপনি নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন:

mvn spring-boot:run

এবং ব্রাউজারে গিয়ে http://localhost:8080/employees এ GET রিকোয়েস্ট পাঠিয়ে আপনার Employee ডেটা দেখতে পারবেন।


ব্যবহারিক উদাহরণ:

  • GET /employees: সমস্ত কর্মচারীর তালিকা পেতে ব্যবহার করা হবে।
  • POST /employees: নতুন কর্মচারী যুক্ত করার জন্য।
  • PUT /employees/{id}: একটি কর্মচারীর তথ্য আপডেট করার জন্য।
  • DELETE /employees/{id}: একটি কর্মচারী মুছে ফেলার জন্য।

সারাংশ

এই উদাহরণে আমরা Spring Boot এবং H2 Database এর ইন্টিগ্রেশন দেখিয়েছি, যেখানে আমরা একটি Employee Management System তৈরি করেছি। আমরা Employee Entity তৈরি করেছি, Spring Data JPA ব্যবহার করে Repository তৈরি করেছি এবং একটি RESTful API তৈরি করেছি যা ডেটাবেজ অপারেশনগুলো পরিচালনা করতে সক্ষম। H2 Web Console ব্যবহার করে ডেটাবেজ অ্যাক্সেস এবং ডেভেলপমেন্ট আরও সহজ করা হয়েছে।

common.content_added_by

H2 Database তৈরি এবং টেবিল ম্যানিপুলেশন

202
202

H2 Database একটি লাইটওয়েট এবং দ্রুত SQL ডেটাবেজ সিস্টেম, যা ইন-মেমরি বা ডিস্ক-ভিত্তিক ডেটাবেজ তৈরি করার জন্য ব্যবহৃত হয়। H2 ডেটাবেজে ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন করা খুবই সহজ এবং দ্রুত। এই টিউটোরিয়ালে আমরা আলোচনা করব H2 Database তৈরি, টেবিল তৈরি, এবং টেবিল ম্যানিপুলেশন করার পদ্ধতি।


H2 Database তৈরি করা

H2 Database তৈরি করতে আপনাকে প্রথমে একটি ডেটাবেজ তৈরি করতে হবে। H2 ডেটাবেজটি ইন-মেমরি বা ডিস্কে তৈরি করা যেতে পারে। ডেটাবেজ তৈরি করার জন্য SQL কুয়েরি ব্যবহার করা হয়।

১. H2 Console ব্যবহার করে Database তৈরি করা

  1. H2 Console-এ লগইন করুন (যেমন, http://localhost:8082).
  2. ডেটাবেজ URL, ইউজারনেম এবং পাসওয়ার্ড প্রদান করুন। ডিফল্ট:
    • USER: sa
    • PASSWORD: (খালি)
  3. একটি নতুন ডেটাবেজ তৈরি করতে নিচের কুয়েরি ব্যবহার করুন:
CREATE DATABASE mydb;

এটি mydb নামক একটি নতুন ডেটাবেজ তৈরি করবে।

২. H2 Database URL ব্যবহার করে Database তৈরি করা

H2 ডেটাবেজ URL-এর মাধ্যমে ডেটাবেজ তৈরি করা যায়। উদাহরণস্বরূপ, ইন-মেমরি ডেটাবেজ তৈরি করতে:

jdbc:h2:mem:testdb

এটি একটি ইন-মেমরি ডেটাবেজ তৈরি করবে যেটি শুধুমাত্র সেশন চলাকালীন থাকবে।

ডেটাবেজ বন্ধ হলে এটি স্বয়ংক্রিয়ভাবে মুছে যাবে।

৩. H2 Database Disk-based তৈরি করা

ডিস্ক-ভিত্তিক ডেটাবেজ তৈরি করতে, আপনি ডেটাবেজের পাথ নির্দিষ্ট করে ডেটাবেজ URL ব্যবহার করতে পারেন:

jdbc:h2:~/mydb

এটি ডেটাবেজ ফাইলকে হোম ডিরেক্টরিতে mydb নামে তৈরি করবে।


H2 Database-এ টেবিল তৈরি করা

H2 ডেটাবেজে টেবিল তৈরি করতে CREATE TABLE SQL কমান্ড ব্যবহার করা হয়। একটি টেবিল সাধারণত কলাম এবং রো দ্বারা গঠিত, যেখানে প্রতিটি কলাম একটি নির্দিষ্ট ডেটা টাইপ ধারণ করে।

১. টেবিল তৈরি করার উদাহরণ

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);

এখানে:

  • id: INT টাইপের কলাম এবং এটি PRIMARY KEY
  • name: VARCHAR(100) টাইপের কলাম, যেখানে 100 ক্যারেক্টারের স্ট্রিং ধারণ করা যাবে।
  • age: INT টাইপের কলাম।

২. টেবিল তৈরি এবং ডিফল্ট মান সেট করা

আপনি টেবিলের জন্য ডিফল্ট মানও নির্ধারণ করতে পারেন। উদাহরণস্বরূপ:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) DEFAULT 'Unknown',
    age INT DEFAULT 0
);

এখানে:

  • name এবং age কলামের জন্য ডিফল্ট মান দেওয়া হয়েছে।

৩. টেবিল তৈরি করতে কাস্টম ডেটা টাইপ ব্যবহার করা

H2 ডেটাবেজে আপনি কাস্টম ডেটা টাইপও তৈরি করতে পারেন:

CREATE TYPE phone AS VARCHAR(15);

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    phone phone
);

এখানে:

  • phone একটি কাস্টম ডেটা টাইপ হিসেবে VARCHAR(15) ব্যবহার করা হয়েছে।

H2 Database-এ টেবিল ম্যানিপুলেশন

টেবিল তৈরি করার পর, আপনি বিভিন্ন ধরণের টেবিল ম্যানিপুলেশন করতে পারেন, যেমন ডেটা ইনসার্ট, আপডেট, ডিলিট, এবং কুয়েরি করা।

১. ডেটা ইনসার্ট করা

ডেটাবেজে ডেটা ইনসার্ট করতে INSERT INTO কুয়েরি ব্যবহার করা হয়:

INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30);

এটি employees টেবিলের মধ্যে একটি রেকর্ড ইনসার্ট করবে।

২. ডেটা আপডেট করা

ডেটা আপডেট করতে UPDATE কুয়েরি ব্যবহার করা হয়:

UPDATE employees SET age = 31 WHERE id = 1;

এটি id = 1 রেকর্ডের age ফিল্ডটি 31 তে আপডেট করবে।

৩. ডেটা মুছে ফেলা

ডেটা মুছে ফেলার জন্য DELETE কুয়েরি ব্যবহার করা হয়:

DELETE FROM employees WHERE id = 1;

এটি id = 1 রেকর্ডটি মুছে ফেলবে।

৪. ডেটা কুয়েরি করা

ডেটাবেজ থেকে ডেটা সংগ্রহ করতে SELECT কুয়েরি ব্যবহার করা হয়:

SELECT * FROM employees;

এটি employees টেবিল থেকে সমস্ত রেকর্ড নির্বাচন করবে।

৫. টেবিলের স্ট্রাকচার পরিবর্তন করা

ALTER TABLE কুয়েরি ব্যবহার করে টেবিলের স্ট্রাকচার পরিবর্তন করা যায়:

  • কলাম যোগ করা:

    ALTER TABLE employees ADD COLUMN email VARCHAR(255);
    
  • কলাম মুছে ফেলা:

    ALTER TABLE employees DROP COLUMN email;
    
  • কলামের ডেটা টাইপ পরিবর্তন:

    ALTER TABLE employees ALTER COLUMN age SET DATA TYPE BIGINT;
    

৬. টেবিল মুছে ফেলা

টেবিল মুছে ফেলতে DROP TABLE কুয়েরি ব্যবহার করা হয়:

DROP TABLE employees;

এটি employees টেবিলটি ডিলিট করে দিবে।


H2 Database-এ Index তৈরি এবং ব্যবহার

ডেটাবেজের পারফরম্যান্স উন্নত করার জন্য Index তৈরি করা যেতে পারে। CREATE INDEX কুয়েরি ব্যবহার করে একটি টেবিলের উপর ইনডেক্স তৈরি করা যায়:

CREATE INDEX idx_name ON employees(name);

এটি employees টেবিলের name কলামের উপর একটি ইনডেক্স তৈরি করবে, যা ডেটা খোঁজার গতি বাড়াবে।


H2 Database-এর অন্যান্য টেবিল অপারেশন

১. টেবিলের তথ্য পরীক্ষা করা

টেবিলের তথ্য দেখতে DESCRIBE কুয়েরি ব্যবহার করা হয়:

DESCRIBE employees;

এটি employees টেবিলের কলাম, ডেটা টাইপ এবং অন্যান্য তথ্য প্রদর্শন করবে।

২. টেবিলের রেকর্ড গুনে দেখার জন্য COUNT ব্যবহার করা

SELECT COUNT(*) FROM employees;

এটি employees টেবিলের মোট রেকর্ড সংখ্যা দেখাবে।


সারাংশ

H2 Database এ ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন সহজ এবং সরল। আপনি CREATE TABLE, INSERT, UPDATE, DELETE, এবং SELECT কুয়েরি ব্যবহার করে ডেটা পরিচালনা করতে পারেন। এছাড়াও, আপনি ALTER TABLE, DROP TABLE এবং CREATE INDEX কুয়েরি দিয়ে টেবিলের কাঠামো পরিবর্তন বা পারফরম্যান্স অপটিমাইজ করতে পারেন। H2-এর সরলতা এবং ব্যবহারযোগ্যতা এটিকে ডেভেলপমেন্ট এবং টেস্টিংয়ের জন্য একটি আদর্শ ডেটাবেজ সমাধান করে তোলে।

common.content_added_by

JDBC দিয়ে H2 এর ব্যবহার

207
207

JDBC (Java Database Connectivity) হল Java-তে ডেটাবেজের সাথে যোগাযোগ করার জন্য একটি API, যা ডেটাবেজ থেকে ডেটা নিয়ে আসা, ডেটা আপডেট করা, ইনসার্ট করা এবং ডিলিট করার জন্য ব্যবহৃত হয়। H2 ডেটাবেজে JDBC ব্যবহার করে আপনি সহজেই Java অ্যাপ্লিকেশন থেকে ডেটাবেজের সাথে ইন্টারঅ্যাক্ট করতে পারেন।

এই টিউটোরিয়ালে আমরা JDBC ব্যবহার করে H2 ডেটাবেজ এর বিভিন্ন কার্যকলাপ, যেমন ডেটাবেজে সংযোগ স্থাপন, কুয়েরি এক্সিকিউট করা, এবং ফলাফল পড়া দেখাব।


JDBC দিয়ে H2 ডেটাবেজে সংযোগ স্থাপন

JDBC ব্যবহার করে H2 ডেটাবেজে সংযোগ স্থাপন করার জন্য প্রথমে আপনাকে H2 ড্রাইভার প্রয়োজন হবে। H2 ড্রাইভার সাধারণত .jar ফাইল হিসেবে সরবরাহ করা হয়, যা আপনার প্রোজেক্টে যোগ করতে হবে।

১. H2 ড্রাইভার অ্যাড করা (H2 JDBC Jar ফাইল)

H2 JDBC ড্রাইভার .jar ফাইল ডাউনলোড করতে H2 Official Website থেকে ডাউনলোড করুন এবং আপনার Java প্রোজেক্টে এটিকে যোগ করুন।

২. H2 ডেটাবেজে JDBC সংযোগ স্থাপন করা

এখানে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে আমরা H2 ডেটাবেজে JDBC ব্যবহার করে সংযোগ স্থাপন করব, কুয়েরি এক্সিকিউট করব এবং ফলাফল বের করব।

import java.sql.*;

public class H2JDBCExample {
    public static void main(String[] args) {
        // H2 ডেটাবেজের URL, ইউজারনেম, এবং পাসওয়ার্ড
        String url = "jdbc:h2:~/test"; // ~ মানে হোম ডিরেক্টরি
        String user = "sa";  // ডিফল্ট ইউজারনেম
        String password = "";  // ডিফল্ট পাসওয়ার্ড

        try {
            // ডেটাবেজে সংযোগ স্থাপন
            Connection conn = DriverManager.getConnection(url, user, password);

            // SQL কুয়েরি তৈরি করা
            String sql = "SELECT * FROM employees"; // ধরুন employees টেবিল আছে

            // কুয়েরি এক্সিকিউট করা
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);

            // ফলাফল প্রদর্শন করা
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            }

            // সংযোগ বন্ধ করা
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • DriverManager.getConnection(): এটি H2 ডেটাবেজের সাথে সংযোগ স্থাপন করার জন্য ব্যবহার করা হয়।
  • Statement: SQL কুয়েরি এক্সিকিউট করার জন্য ব্যবহার করা হয়।
  • ResultSet: SQL কুয়েরি থেকে প্রাপ্ত ডেটা ধারণ করে এবং সেই ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।

৩. SQL কুয়েরি এক্সিকিউট করা

JDBC-এ SQL কুয়েরি চালাতে Statement বা PreparedStatement ব্যবহার করা হয়। এখানে Statement ব্যবহার করে কুয়েরি এক্সিকিউট করা হয়েছে।

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
  • executeQuery(): এটি SELECT কুয়েরির জন্য ব্যবহৃত হয়, যা ডেটা বের করে এবং ResultSet ফেরত দেয়।
  • executeUpdate(): এটি INSERT, UPDATE, বা DELETE কুয়েরির জন্য ব্যবহৃত হয়, যেগুলো ডেটাবেজে পরিবর্তন করে।

PreparedStatement ব্যবহার করা

PreparedStatement ব্যবহারে নিরাপদ এবং কার্যকরী SQL কুয়েরি তৈরি করা যায়, যা SQL ইনজেকশন প্রতিরোধ করে।

PreparedStatement ব্যবহার করে SQL কুয়েরি এক্সিকিউট করা

String sql = "INSERT INTO employees (id, name, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);

// প্যারামিটার সেট করা
pstmt.setInt(1, 1);  // id = 1
pstmt.setString(2, "John Doe");  // name = "John Doe"
pstmt.setInt(3, 30);  // age = 30

// কুয়েরি এক্সিকিউট করা
pstmt.executeUpdate();
  • setInt(), setString() ইত্যাদি মেথড ব্যবহার করে প্যারামিটারগুলোর মান সেট করা হয়।
  • executeUpdate() কুয়েরি এক্সিকিউট করে ডেটাবেজে পরিবর্তন আনে (যেমন, ইনসার্ট, আপডেট, ডিলিট)।

ডেটা ইন্সার্ট, আপডেট, এবং ডিলিট করা

1. INSERT কুয়েরি

String sql = "INSERT INTO employees (id, name, age) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2);
pstmt.setString(2, "Jane Smith");
pstmt.setInt(3, 28);
pstmt.executeUpdate();

2. UPDATE কুয়েরি

String sql = "UPDATE employees SET age = ? WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 29); // নতুন বয়স
pstmt.setInt(2, 2);  // id = 2
pstmt.executeUpdate();

3. DELETE কুয়েরি

String sql = "DELETE FROM employees WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2);  // id = 2
pstmt.executeUpdate();

JDBC-এ ট্রানজ্যাকশন ম্যানেজমেন্ট

JDBC তে ডেটাবেজের মধ্যে ট্রানজ্যাকশন ম্যানেজমেন্ট পরিচালনা করতে commit() এবং rollback() ব্যবহৃত হয়।

ট্রানজ্যাকশন ম্যানেজমেন্ট উদাহরণ

conn.setAutoCommit(false); // অটোমেটিক কমিট বন্ধ করা

try {
    // একাধিক অপারেশন
    PreparedStatement pstmt1 = conn.prepareStatement("UPDATE employees SET age = ? WHERE id = ?");
    pstmt1.setInt(1, 35);
    pstmt1.setInt(2, 1);
    pstmt1.executeUpdate();

    PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO employees (id, name, age) VALUES (?, ?, ?)");
    pstmt2.setInt(1, 3);
    pstmt2.setString(2, "Alice Brown");
    pstmt2.setInt(3, 40);
    pstmt2.executeUpdate();

    conn.commit(); // ট্রানজ্যাকশন কমিট করা
} catch (SQLException e) {
    conn.rollback(); // সমস্যা হলে রোলব্যাক করা
}

এখানে:

  • setAutoCommit(false): ডিফল্টভাবে, JDBC ট্রানজ্যাকশনগুলো অটোমেটিক্যালি কমিট করে, কিন্তু setAutoCommit(false) দিয়ে এটি বন্ধ করা হয় এবং ট্রানজ্যাকশন পরিচালনা করা হয়।
  • commit(): ট্রানজ্যাকশন কমিট করে সমস্ত পরিবর্তন ডেটাবেজে স্থায়ী করে।
  • rollback(): কোনো ত্রুটি হলে ট্রানজ্যাকশন রোলব্যাক করে এবং পূর্বের অবস্থা ফিরিয়ে নেয়।

JDBC দিয়ে H2 ডেটাবেজের কার্যকরী ব্যবহার

  1. ডেটাবেজ সংযোগ স্থাপন এবং কুয়েরি এক্সিকিউট করা
  2. PreparedStatement ব্যবহার করে নিরাপদ কুয়েরি
  3. ট্রানজ্যাকশন ম্যানেজমেন্ট ব্যবহার করে একাধিক অপারেশন পরিচালনা
  4. ডেটাবেজে ডেটা ইনসার্ট, আপডেট, এবং ডিলিট করা

JDBC-এর মাধ্যমে H2 ডেটাবেজে সহজেই সংযোগ স্থাপন করা যায় এবং Java অ্যাপ্লিকেশন থেকে ডেটাবেজ অপারেশনগুলি পরিচালনা করা যায়। JDBC একটি শক্তিশালী API, যা ডেটাবেজ অ্যাক্সেস এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।

common.content_added_by

Spring Boot প্রজেক্টে H2 ব্যবহার উদাহরণ

212
212

Spring Boot একটি জনপ্রিয় Java ফ্রেমওয়ার্ক যা দ্রুত এবং সহজে ওয়েব অ্যাপ্লিকেশন এবং মাইক্রোসার্ভিস তৈরি করতে সহায়তা করে। H2 ডেটাবেজকে Spring Boot প্রজেক্টে ব্যবহার করা খুবই সহজ, কারণ Spring Boot অনেক বিল্ট-ইন কনফিগারেশন এবং ডিফল্ট সেটআপ সরবরাহ করে, যা আপনাকে H2 ডেটাবেজ ইন্টিগ্রেট করতে সাহায্য করে। এখানে আমরা দেখব কিভাবে একটি Spring Boot প্রজেক্টে H2 ডেটাবেজ ইন্টিগ্রেট করা যায় এবং ব্যবহার করা যায়।


ধাপ ১: Spring Boot প্রজেক্ট তৈরি করা

প্রথমে, আপনি Spring Boot প্রজেক্ট তৈরি করুন। আপনি Spring Initializr ব্যবহার করে সহজেই একটি Spring Boot প্রজেক্ট তৈরি করতে পারেন। প্রজেক্ট তৈরি করার সময় নিচের ডিপেনডেন্সি যোগ করুন:

  • Spring Web
  • Spring Data JPA
  • H2 Database

এর পর, "Generate" বাটনে ক্লিক করুন এবং আপনার প্রজেক্ট ডাউনলোড করুন। তারপর এটি আপনার IDE (যেমন IntelliJ IDEA বা Eclipse) এ ওপেন করুন।


ধাপ ২: application.properties কনফিগারেশন

Spring Boot প্রজেক্টে H2 ডেটাবেজ কনফিগার করার জন্য application.properties ফাইলে কিছু কনফিগারেশন যোগ করতে হবে।

# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb  # ইন-মেমরি ডেটাবেজ
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# Hibernate Configuration
spring.jpa.hibernate.ddl-auto=update  # ডেটাবেজ স্কিমা আপডেট হবে

# H2 Console Configuration
spring.h2.console.enabled=true  # H2 Console অ্যাক্সেস করতে পারবেন
spring.h2.console.path=/h2-console  # H2 Console এর URL path
  • spring.datasource.url=jdbc:h2:mem:testdb: এটি ইন-মেমরি ডেটাবেজ ব্যবহার করবে। অর্থাৎ ডেটাবেজটি শুধুমাত্র রান টাইমে থাকবে এবং প্রোগ্রাম বন্ধ হলে ডেটা মুছে যাবে।
  • spring.h2.console.enabled=true: এটি H2 Console সক্ষম করবে, যাতে আপনি আপনার ডেটাবেজটি একটি ওয়েব ব্রাউজারে দেখতে পারেন।
  • spring.jpa.hibernate.ddl-auto=update: Hibernate ব্যবহার করে ডেটাবেজ স্কিমা স্বয়ংক্রিয়ভাবে আপডেট হবে।

ধাপ ৩: Entity Class তৈরি করা

Spring Data JPA ব্যবহার করতে হলে আপনাকে একটি Entity ক্লাস তৈরি করতে হবে, যা ডেটাবেজ টেবিলের সাথে ম্যাপ হবে।

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;

    // Getters and Setters

    public Employee() {}

    public Employee(Long id, String name, String department) {
        this.id = id;
        this.name = name;
        this.department = department;
    }

    // Getters and Setters
}

এটি একটি Employee টেবিলের জন্য Entity ক্লাস। এখানে @Entity অ্যানোটেশন ব্যবহার করা হয়েছে যাতে এটি JPA Entity হিসেবে কাজ করে।


ধাপ ৪: Repository তৈরি করা

এখন আপনাকে একটি Repository তৈরি করতে হবে, যা H2 ডেটাবেজের সাথে ইন্টারঅ্যাক্ট করবে। Spring Data JPA ব্যবহার করে এটি অনেক সহজ।

package com.example.demo.repository;

import com.example.demo.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    // Custom queries can be defined here if needed
}

এটি JpaRepository এক্সটেন্ড করেছে, যার মাধ্যমে আপনি ডেটাবেজে CRUD অপারেশন করতে পারবেন।


ধাপ ৫: Service Class তৈরি করা

এখন একটি Service ক্লাস তৈরি করা হবে, যা EmployeeRepository এর মাধ্যমে ডেটাবেজ অপারেশন করবে।

package com.example.demo.service;

import com.example.demo.model.Employee;
import com.example.demo.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    // Get all employees
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    // Save employee
    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }
}

এটি একটি সিম্পল Service ক্লাস যেখানে getAllEmployees এবং saveEmployee মেথড রয়েছে, যা ডেটাবেজ থেকে সমস্ত কর্মচারী তথ্য নিয়ে আসে এবং নতুন কর্মচারী সংরক্ষণ করে।


ধাপ ৬: Controller তৈরি করা

এখন একটি Controller তৈরি করা হবে, যা HTTP রিকোয়েস্ট হ্যান্ডেল করবে।

package com.example.demo.controller;

import com.example.demo.model.Employee;
import com.example.demo.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    // Get all employees
    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    // Add a new employee
    @PostMapping
    public Employee addEmployee(@RequestBody Employee employee) {
        return employeeService.saveEmployee(employee);
    }
}

এটি একটি REST Controller যেখানে GET এবং POST রিকোয়েস্ট হ্যান্ডেল করা হচ্ছে:

  • GET /api/employees: সমস্ত কর্মচারী তথ্য নিয়ে আসে।
  • POST /api/employees: নতুন কর্মচারী ডেটাবেজে ইনসার্ট করে।

ধাপ ৭: H2 Console অ্যাক্সেস করা

আপনি Spring Boot প্রজেক্ট চালানোর পর H2 Console অ্যাক্সেস করতে পারবেন। আপনার ব্রাউজারে http://localhost:8082/h2-console URL তে যান। আপনি jdbc:h2:mem:testdb ব্যবহার করে লগইন করতে পারবেন এবং ডেটাবেজ দেখতে পারবেন।


ধাপ ৮: Spring Boot অ্যাপ্লিকেশন চালানো

সবশেষে, Spring Boot অ্যাপ্লিকেশন চালাতে আপনার DemoApplication.java ক্লাসে main মেথড কল করুন:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

এখন Spring Boot অ্যাপ্লিকেশন রান করুন এবং আপনি H2 Database ব্যবহার করে আপনার ডেটাবেজ পরিচালনা করতে পারবেন।


সারাংশ

এটি ছিল Spring Boot প্রজেক্টে H2 ডেটাবেজ ইন্টিগ্রেশন করার একটি সিম্পল উদাহরণ। H2 ডেটাবেজ Spring Boot এর সাথে সহজেই একীভূত হতে পারে এবং এর ব্যবহার সহজ এবং দ্রুত। আপনি ডেটাবেজ কনফিগারেশন, Entity ক্লাস, Repository, Service এবং Controller তৈরি করে Spring Boot প্রজেক্টে H2 ডেটাবেজের সাথে কাজ করতে পারেন। H2 Console আপনাকে ডেটাবেজের সমস্ত তথ্য দেখতে এবং পরিচালনা করতে সহায়তা করবে।

common.content_added_by

Stored Procedure এবং Trigger এর ব্যবহার

213
213

Stored Procedure এবং Trigger দুটি SQL-ভিত্তিক বৈশিষ্ট্য, যা ডেটাবেজে ব্যবহৃত হয় বিভিন্ন কার্যকলাপ স্বয়ংক্রিয়ভাবে সম্পাদন করতে। এগুলি ডেটাবেজের পারফরম্যান্স উন্নত করতে এবং ডেটা ইন্টিগ্রিটি এবং সিকিউরিটি বজায় রাখতে সাহায্য করে। যদিও Stored Procedure এবং Trigger একই কাজের জন্য ব্যবহৃত হতে পারে, তাদের মধ্যে কিছু পার্থক্য রয়েছে এবং আলাদা কাজ করার জন্য তাদের ব্যবহার করা হয়।

এই টিউটোরিয়ালে আমরা Stored Procedure এবং Trigger এর মধ্যে পার্থক্য, তাদের ব্যবহার এবং উদাহরণ নিয়ে আলোচনা করব।


Stored Procedure কী?

Stored Procedure হল SQL কোডের একটি ব্লক যা ডেটাবেজে সংরক্ষিত থাকে এবং একাধিক SQL অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এটি ডেটাবেজের ভেতরে একটি লজিক্যাল ইউনিট হিসেবে কাজ করে এবং যখন প্রয়োজন হয় তখন এটি কল করা হয়। Stored Procedure-এ সাধারণত একাধিক SQL স্টেটমেন্ট থাকে, যা কোনো কাজ বা লজিক সম্পাদন করে।

Stored Procedure এর সুবিধা:

  1. কোড পুনঃব্যবহারযোগ্যতা: একবার Stored Procedure তৈরি করার পরে, এটি বারবার ব্যবহৃত হতে পারে।
  2. পারফরম্যান্স উন্নতি: Stored Procedure-গুলো ডেটাবেজে সংরক্ষিত হওয়ায়, এগুলি সরাসরি ডেটাবেজ থেকে চালানো হয়, যার ফলে কার্যকারিতা উন্নত হয়।
  3. নিরাপত্তা: Stored Procedure ব্যবহার করে আপনি সিস্টেমের নিরাপত্তা বাড়াতে পারেন, কারণ ব্যবহারকারীদের সরাসরি SQL কুয়েরি চালানোর অনুমতি না দিয়ে, আপনি নির্দিষ্ট Stored Procedures কল করার অনুমতি দিতে পারেন।

Stored Procedure তৈরি করা:

CREATE PROCEDURE procedure_name (param1 datatype, param2 datatype)
BEGIN
  -- SQL statements
END;

Stored Procedure কল করা:

CALL procedure_name(param1, param2);

Stored Procedure উদাহরণ

ধরা যাক, আমাদের একটি users টেবিল রয়েছে এবং আমরা একটি Stored Procedure তৈরি করতে চাই, যা users টেবিলে একটি নতুন ইউজার যোগ করবে।

CREATE PROCEDURE AddUser (id INT, name VARCHAR, age INT)
BEGIN
  INSERT INTO users (id, name, age) VALUES (?, ?, ?);
END;

এখন, এই Stored Procedure কল করতে:

CALL AddUser(1, 'Alice', 25);

এটি users টেবিলে একটি নতুন ইউজার যোগ করবে যার id = 1, name = 'Alice', এবং age = 25


Trigger কী?

Trigger হল একটি বিশেষ ধরনের SQL কোড যা নির্দিষ্ট ইভেন্টের পরে স্বয়ংক্রিয়ভাবে কার্যকর হয়। Trigger সাধারণত INSERT, UPDATE, অথবা DELETE অপারেশনগুলির উপর নির্ভর করে কাজ করে। যখন কোনো নির্দিষ্ট ডেটাবেজ ইভেন্ট ঘটে, তখন Trigger স্বয়ংক্রিয়ভাবে কাজ শুরু করে।

Trigger এর সুবিধা:

  1. স্বয়ংক্রিয় কার্যক্রম: Trigger ব্যবহার করে, ডেটাবেজে পরিবর্তন ঘটানোর সময় স্বয়ংক্রিয় কার্যক্রম সম্পাদন করা যায়।
  2. ডেটা ইন্টিগ্রিটি বজায় রাখা: Trigger ডেটার ইনটিগ্রিটি নিশ্চিত করতে সাহায্য করে, যেমন ডেটাবেজের কোনো টেবিলের মধ্যে ডুপ্লিকেট এন্ট্রি প্রতিরোধ করা।
  3. অডিটিং: Trigger ব্যবহার করে আপনি ডেটাবেজের পরিবর্তনগুলো ট্র্যাক করতে পারেন (যেমন, কোন ইউজার কোন রেকর্ড আপডেট করেছে)।

Trigger তৈরি করা:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
  -- SQL statements
END;
  • AFTER: Trigger একটি কার্যক্রম শেষ হওয়ার পর কল হবে।
  • BEFORE: Trigger একটি কার্যক্রম চালানোর আগে কল হবে।
  • FOR EACH ROW: প্রতি রেকর্ডের জন্য Trigger কার্যকর হবে।

Trigger উদাহরণ

ধরা যাক, আমাদের users টেবিল রয়েছে এবং আমরা এমন একটি Trigger তৈরি করতে চাই যা users টেবিলে কোনো নতুন ইউজার ইনসার্ট হওয়ার পর একটি লগ টেবিল তৈরি করবে।

CREATE TRIGGER logNewUser
AFTER INSERT ON users
FOR EACH ROW
BEGIN
  INSERT INTO log (message) VALUES ('New user added: ' || NEW.name);
END;

এটি users টেবিলে নতুন ইউজার ইনসার্ট হলে log টেবিলে একটি বার্তা যুক্ত করবে, যেখানে NEW.name নতুন ইউজারের নাম ধারণ করবে।


Stored Procedure এবং Trigger এর মধ্যে পার্থক্য

বৈশিষ্ট্যStored ProcedureTrigger
ক্রিয়া সম্পাদনকল করার জন্য ম্যানুয়ালি চালানো হয়নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে কার্যকর হয়
কোড এক্সিকিউটডেটাবেজের সাথে যুক্ত হওয়ার পরে কল করা হয়ডেটাবেজে ঘটিত যেকোনো পরিবর্তন বা ইভেন্ট trigger করবে
নির্দেশনা গ্রহণপ্যারামিটার গ্রহণ করতে পারেপ্যারামিটার গ্রহণ করতে পারে না
ব্যবহারএকটি নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়ডেটাবেজে INSERT, UPDATE, DELETE অপারেশনগুলির পরে স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়
ফলাফলরিটার্ন ভ্যালু থাকতে পারেকোনো ফলাফল রিটার্ন করে না

Stored Procedure এবং Trigger এর ব্যবহারিক উদাহরণ

১. Stored Procedure উদাহরণ:

ধরা যাক, আপনি একটি sales টেবিলের জন্য একটি Stored Procedure তৈরি করতে চান, যা নতুন বিক্রির তথ্য ইনসার্ট করবে।

CREATE PROCEDURE AddSale (sale_id INT, amount DECIMAL)
BEGIN
  INSERT INTO sales (sale_id, amount) VALUES (sale_id, amount);
END;

২. Trigger উদাহরণ:

এখন, আপনি এমন একটি Trigger তৈরি করতে চান, যা sales টেবিলে নতুন ইনসার্ট হওয়া বিক্রির পর স্বয়ংক্রিয়ভাবে একটি লগ টেবিল তৈরি করবে।

CREATE TRIGGER logSale
AFTER INSERT ON sales
FOR EACH ROW
BEGIN
  INSERT INTO sales_log (message) VALUES ('Sale added with ID: ' || NEW.sale_id);
END;

এটি sales টেবিলে নতুন বিক্রি হওয়ার পর sales_log টেবিলে একটি বার্তা লিখবে।


সারাংশ

Stored Procedure এবং Trigger ডেটাবেজ অপারেশনগুলিকে আরও কার্যকরী এবং নিরাপদ করে তোলে। Stored Procedure কোড পুনঃব্যবহারযোগ্য এবং কার্যকরী হওয়ার জন্য ব্যবহৃত হয়, যেখানে Trigger স্বয়ংক্রিয়ভাবে নির্দিষ্ট ডেটাবেজ পরিবর্তন ঘটানোর পর কার্যকর হয়। এগুলির ব্যবহার ডেটাবেজের পারফরম্যান্স উন্নত করতে এবং ডেটা সুরক্ষা নিশ্চিত করতে সহায়ক।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion